package com.code.leetcode._202504;

import com.code.leetcode._202503.ListNode;

/**两两交换链表中的节点 ，难度为 中等**/
public class SwapParis {
    public ListNode swapPairs(ListNode head) {
        //增加一个虚拟头结点
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        recursive(dummy);
        return dummy.next;
    }
    public void recursive(ListNode root){
        //链表的长度为0 和1直接返回
        if (root.next != null && root.next.next != null) {
            //获取传入 的链表的前两个数据 a，b
            ListNode a = root.next;
            ListNode b = a.next;
            //讲b的值往前移一个位置
            root.next = b;
            a.next = b.next;
            b.next = a;
            recursive(a);
        }
    }

    public ListNode swapPairs1(ListNode head) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        for (ListNode cur = dummy; cur.next != null && cur.next.next != null;) {
            ListNode a = cur.next, b = a.next;
            cur.next = b;
            a.next = b.next;
            b.next = a;
            cur = a;
        }
        return dummy.next;
    }
}
